<?php

namespace App\Http\Controllers\Admin;

use App\Models\Node;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class NodeController extends BaseController {
    /**
     * 节点列表
     */
    public function index(Request $request) {
        // 获取搜索框
        $name = $request->get('name', '');

        // 分页 搜索
        // 参数1， 变量值存在。则执行 参数2--->匿名函数
        $data = Node::when($name, function ($query) use ($name) {
            $query->where('name', 'like', "%{$name}%");
        })->orderBy('id', 'asc')->withTrashed()->paginate($this->pagesize);
        return view('admin.node.index', compact('data', 'name'));
    }

  // 添加显示
    public function create() {
        // 获取所有的顶部
        $data = Node::where('pid', 0)->get();
        return view('admin.node.create', compact('data'));
    }

    /**
     * 添加处理
     */
    public function store(Request $request) {
        // 表单验证
        // try() catch()
        // 入库
        /*$data = $request->except('_token');
        $data['route_name'] = empty()*/
        Node::create($request->except('_token'));
        return ['status' => 0, 'msg' => '添加权限成功'];
    }

   /**
     * 根据ID显示对应信息
     */
    public function show(Node $node) {
        //
    }

     /**
     * 修改显示
     */
    public function edit(int $id) {
        $data = Node::where('pid', 0)->get();
        $model = Node::find($id);

        return view('admin.node.edit', compact('data','model'));
    }

    /**
     * 修改处理
     */
    public function update(Request $request,int $id) {
        // 异常处理
        try {
            $this->validate($request, [
                // unique:表名,唯一字段,[排除行的值，以那个字段来排除]
                // 排除id=3的哪行名为name的字段值
                'name' => 'required|unique:roles,name,' . $id . ',id'
            ]);
        } catch (\Exception $e) {
            return ['status' => 1000, 'msg' => '验证不通过'];
        }
        Node::where([['id', '=', $id]])->update($request->only(['name','route_name','pid','is_menu']));
        return ['status' => 0, 'msg' => '修改节点成功'];

         
   }

    /**
     * 删除操作
     */
    public function destroy(int $id) {
        // 删除
        Node::find($id)->delete(); 
        return ['status' => 0, 'msg' => '删除成功'];
}
// 还原
public function restore(int $id){
    // 还原，只显示已删除的数据
    Node::onlyTrashed()->where('id',$id)->restore();
    return redirect(route('admin.node.index'))->with('success','还原成功');
}

}